<?php
/**
 * User: hjd-yao
 * Date: 2019/1/28
 * Time: 17:17
 */

namespace App\Http\Controllers\Cms;


use App\Helpers\SelfResponse;
use App\Http\Controllers\BackendController;
use App\Models\Cms\ArticleCatModel;
use App\Models\Cms\ArticleModel;
use App\Models\ManageAdminModel;
use http\Client\Response;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class ArticleController extends BackendController
{
    private static $_articleModel;

    public function __construct()
    {
        self::$_articleModel = ArticleModel::init();
    }

    /**
     * @title 文章列表
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function index()
    {
        $list = self::$_articleModel->paginate($this->getPerPageNum());
        return view('backend::cms.article.article_list',[
            'page_title'=>'文章管理',
            'list'=>$list
        ]);
    }


    /**
     * @title 发布文章
     * @param Request $request
     * @return SelfResponse|\Illuminate\View\View
     */
    public function addArticle(Request $request)
    {
        if($request->isMethod('post')){

            if(!$request->input('title')){
                return SelfResponse::error('请添加文章标题');
            }
            if(!$request->input('subtitle')){
                return SelfResponse::error('请添加文章副标题');
            }
            if(!$request->input('cat_id')){
                return SelfResponse::error('请选择文章分类');
            }

            $filemp3 = $request->file('mp3');
            $filemp4 = $request->file('mp4');
//            dd($file);
            // 文件是否上传成功
            if($filemp3) {
                if ($filemp3->isValid()) {

                    // 获取文件相关信息
                    $originalName = $filemp3->getClientOriginalName(); // 文件原名
                    $ext = $filemp3->getClientOriginalExtension();     // 扩展名
                    $realPath = $filemp3->getRealPath();   //临时文件的绝对路径
                    $type = $filemp3->getClientMimeType();     // image/jpeg
                    if ($type != 'audio/mpeg') {
                        return SelfResponse::error('音频格式错误');
                    }
                    // 上传文件
                    $filename = 'mp3/' . date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext;
                    // 使用我们新建的uploads本地存储空间（目录）
                    //这里的uploads是配置文件的名称
                    $bool = Storage::disk('upload')->put($filename, file_get_contents($realPath));
                    if (!$bool) {
                        return SelfResponse::error('上传失败');
                    }
                    self::$_articleModel->mp3 = '/uploads/' . $filename;
                }
            }
            if($filemp4) {
                if ($filemp4->isValid()) {

                    // 获取文件相关信息
                    $originalName = $filemp4->getClientOriginalName(); // 文件原名
                    $ext = $filemp4->getClientOriginalExtension();     // 扩展名
                    $realPath = $filemp4->getRealPath();   //临时文件的绝对路径
                    $type = $filemp4->getClientMimeType();     // image/jpeg
                    if ($type != 'video/mp4') {
                        return SelfResponse::error('视频格式错误');
                    }
                    // 上传文件
                    $filename = 'mp4/' . date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext;
                    // 使用我们新建的uploads本地存储空间（目录）
                    //这里的uploads是配置文件的名称
                    $bool = Storage::disk('upload')->put($filename, file_get_contents($realPath));
                    if (!$bool) {
                        return SelfResponse::error('上传失败');
                    }
                    self::$_articleModel->mp4 = '/uploads/' . $filename;
                }
            }

            self::$_articleModel->title = $request->input('title');
            self::$_articleModel->subtitle = $request->input('subtitle');
            self::$_articleModel->cat_id = $request->input('cat_id');
            self::$_articleModel->thumb = $request->input('thumb');
            self::$_articleModel->content = $request->input('content');
            self::$_articleModel->sort = $request->input('sort');
            self::$_articleModel->description = $request->input('description');
            self::$_articleModel->keywords = $request->input('key_words');
            self::$_articleModel->is_open = $request->input('is_open');
            self::$_articleModel->author = $request->input('author',ManageAdminModel::init()->getLoginInfo('mgr_name'));
            if(self::$_articleModel->save()){
                return SelfResponse::success('文章添加成功','b_Article_index');
            }
            return SelfResponse::error('文章添加失败');
        }else{
            $categories = ArticleCatModel::init()->select(['id','title','parent_id'])->get()->toArray();
            if(!$categories){
                return redirect()->route('b_ArticleCat_addCat');
            }
            $categories = format_cascade($categories);
            return view('backend::cms.article.article_add',[
                'page_title'=>'添加文章',
                'categories'=>json_encode($categories)
            ]);
        }
    }

    /**
     * @title 编辑文章
     * @param Request $request
     * @param $id
     * @return SelfResponse|\Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
     */
    public function editArticle(Request $request,$id)
    {
        $info = self::$_articleModel::find($id);

        if($request->isMethod('post')){
            if(!$info){
                return SelfResponse::error('修改信息不存在');
            }

            if(!$request->input('title')){
                return SelfResponse::error('请添加文章标题');
            }
            if(!$request->input('subtitle')){
                return SelfResponse::error('请添加文章副标题');
            }
            if(!$request->input('cat_id')){
                return SelfResponse::error('请选择文章分类');
            }

            $filemp3 = $request->file('mp3');
            $filemp4 = $request->file('mp4');
            //dd($filemp3);
            // 文件是否上传成功
            if($filemp3){
         
                if ($filemp3->isValid()) {

                    // 获取文件相关信息
                    $originalName = $filemp3->getClientOriginalName(); // 文件原名
                    $ext = $filemp3->getClientOriginalExtension();     // 扩展名
                    $realPath = $filemp3->getRealPath();   //临时文件的绝对路径
                    $type = $filemp3->getClientMimeType();     // image/jpeg
                    if ($type!='audio/mpeg'){
                        return SelfResponse::error('音频格式错误');
                    }
                    // 上传文件
                    $filename = 'mp3/'.date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext;
                    // 使用我们新建的uploads本地存储空间（目录）
                    //这里的uploads是配置文件的名称
                    $bool = Storage::disk('upload')->put($filename, file_get_contents($realPath));
                    if(!$bool){
                        return SelfResponse::error('上传失败');
                    }
                    $info->mp3 = '/uploads/'.$filename;
                }
            }
            if($filemp4) {
                if ($filemp4->isValid()) {
                    // 获取文件相关信息
                    $originalName = $filemp4->getClientOriginalName(); // 文件原名
                    $ext = $filemp4->getClientOriginalExtension();     // 扩展名
                    $realPath = $filemp4->getRealPath();   //临时文件的绝对路径
                    $type = $filemp4->getClientMimeType();     // image/jpeg
                    if ($type != 'video/mp4') {
                        return SelfResponse::error('视频格式错误');
                    }
                    // 上传文件
                    $filename = 'mp4/' . date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext;
                    // 使用我们新建的uploads本地存储空间（目录）
                    //这里的uploads是配置文件的名称
                    $bool = Storage::disk('upload')->put($filename, file_get_contents($realPath));
                    if (!$bool) {
                        return SelfResponse::error('上传失败');
                    }
                    $info->mp4 = '/uploads/' . $filename;
                }
            }

            $info->title = $request->input('title');
            $info->subtitle = $request->input('subtitle');
            $info->cat_id = $request->input('cat_id');
            $info->thumb = $request->input('thumb');
            $info->content = $request->input('content');
            $info->sort = $request->input('sort');
            $info->description = $request->input('description');
            $info->keywords = $request->input('key_words');
            if($info->save()){
                return SelfResponse::success('文章编辑成功','b_Article_index');
            }
            return SelfResponse::error('文章编辑失败');
        }else{
            $categories = ArticleCatModel::init()->select(['id','title','parent_id'])->get()->toArray();

            $categories = format_cascade($categories);

            return view('backend::cms.article.article_edit',[
                'page_title'=>'编辑文章',
                'info'=>$info,
                'categories'=>json_encode($categories)
            ]);
        }
    }

    /**
     * @title 删除文章
     * @param $id
     * @return SelfResponse|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
     */
    public function delArticle($id)
    {
        $info = self::$_articleModel::find($id);
        if(!$info){
            return SelfResponse::error('记录不存在');
        }
        if(self::$_articleModel::where('id',$id)->delete()){
            return SelfResponse::success($info->title.'删除成功');
        }
        return SelfResponse::error($info->title.'删除失败');
    }

    /**
     * @title 启用/禁用文章
     * @param $id
     * @return SelfResponse|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
     */
    public function switchArticle($id)
    {
        $info = self::$_articleModel::find($id);
        if(!$info){
            return SelfResponse::error('记录不存在');
        }
        $info->is_open = abs($info->is_open-1);
        if($info->save()){
            return SelfResponse::success($info->title.'操作成功');
        }
        return SelfResponse::error($info->title.'操作失败');
    }

    /**
     * @title 文章详情
     * @param $id
     * @return View
     */
    public function article($id)
    {
        $info = self::$_articleModel::find($id);
        return view('backend::cms.article.article_info',[
            'info'=>$info
        ]);
    }
}